/**
 * https://leetcode-cn.com/problems/second-minimum-node-in-a-binary-tree/
 * 二叉树中第二小的值
 * @param root 
 */
const findSecondMinimumValue = (root: TreeNode | null): number => {
    if (root === null) return -1;
    // 默认是-1
    let ans = -1;

    let rootVal = root.val

    /**
     * 先序遍历
     * @param n 
     * @returns 
     */
    const preOrder = (n: TreeNode | null) => {
        // 为空, 直接返回
        if (n === null) return;

        // 找到了比根小的值了, 并且当前值还要大
        if (ans !== -1 && n.val >= ans) return;

        // 找到比根小的值
        if (rootVal < n.val) {
            // 更新ans
            ans = rootVal
            // 找到了
        }
        // 遍历左子树
        preOrder(n.left)

        // 遍历右子树
        preOrder(n.right)
    }

    preOrder(root);
    return ans
};